// MapStorageImpl.ts
import type { IStorage } from '../types';

/** 基于 Map 实现的内存存储类，实现 IStorage 接口 适用于需要临时存储键值对的场景 */
class MapStorageImpl implements IStorage {
  /** 内部存储 Map */
  private map: Map<string, string>;

  /** 构造函数，初始化内部 Map */
  constructor() {
    this.map = new Map<string, string>();
  }

  /**
   * 设置指定 key 的值
   *
   * @param key 键名，类型为 string
   * @param value 键值，类型为 string
   * @returns 无返回值
   */
  setItem(key: string, value: string): void {
    this.map.set(key, value);
  }

  /**
   * 获取指定 key 的值
   *
   * @param key 键名，类型为 string
   * @returns 对应的值，若不存在则返回 null
   */
  getItem(key: string): string | null {
    return this.map.get(key) ?? null;
  }

  /**
   * 移除指定 key 的项
   *
   * @param key 键名，类型为 string
   * @returns 无返回值
   */
  removeItem(key: string): void {
    this.map.delete(key);
  }

  /**
   * 清空所有存储项
   *
   * @returns 无返回值
   */
  clear(): void {
    this.map.clear();
  }

  /**
   * 检查指定 key 是否存在
   *
   * @param key 键名，类型为 string
   * @returns 存在返回 true，否则返回 false
   */
  keyExists(key: string): boolean {
    return this.map.has(key);
  }
}

export default MapStorageImpl;
